﻿#include "syntax_node.h"

void SyntaxNode::push_back_front_ele(std::string &ele)
{
    m_self_front_ele.push_back(ele);
}

void SyntaxNode::push_back_rear_ele(std::string &ele)
{
    m_self_rear_ele.push_back(ele);
}

void SyntaxNode::push_back_front_ele(SyntaxNode &node)
{
    m_self_front_ele.insert(m_self_front_ele.end(), node.m_self_front_ele.begin(), node.m_self_front_ele.end());
}

void SyntaxNode::push_child(SyntaxNode &node)
{
    m_child_node.push_back(node);
}

void SyntaxNode::move_child(SyntaxNode &node)
{
    m_child_node.insert(m_child_node.end(), node.m_child_node.begin(), node.m_child_node.end());
}

std::ostream &operator<<(std::ostream &os, const SyntaxNode &n)
{
    // os << "============================================" << std::endl;
    for (auto &&e : n.m_self_front_ele)
    {
        os << e << " ";
    }
    if (!n.m_self_front_ele.empty())
    {
        os << std::endl;
    }
    for (auto &&node : n.m_child_node)
    {
        os << node;
    }
    for (auto &&e : n.m_self_rear_ele)
    {
        os << e << " ";
    }
    if (!n.m_self_rear_ele.empty())
    {
        os << std::endl;
    }
    // os << "============================================" << std::endl;
    return os;
}